///////////////////////////////////////////////////////////////////////////////////////////////////
// Illusion Ray Development Kit (IDK)           Copyright (c) 2010 ( dimitriy.martynenko@gmail.com )
///////////////////////////////////////////////////////////////////////////////////////////////////
// Created : 2010-05-22
// Updated : ...
// Licence : NEW BSD
// Info	   : IDK Engine
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma once

#include <IDK.hpp>

namespace Renderer
{
	//
	class TOccluderFrustum : public TObject, virtual public IDK::IOcclusionQuery
	{
		IDKClass;
	protected:
		bool mEnable;
		Math::Matrix44 mMatrixFrustum;
		Math::Matrix44 mInv;
	protected:
		inline float PlaneDot(uint index, const Math::Vector3& p) const;
	public:
		TOccluderFrustum(void);
	public://Impl
		virtual void Enable(bool value);
		virtual float GetNearDistance(const Math::AABB& /*aabb*/) const;
		virtual bool AABBInSpace(const Math::AABB& aabb, float& distance) const;
		virtual void Update(const Math::Matrix44& proj, const Math::Matrix44& view);
	};
}